home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / c / vbccppcsrc.lha / vbcc / pasm / predefs.c < prev    next >
Text File  |  1999-03-07  |  25KB  |  514 lines

  1. /* $VER: pasm predefs.c V1.2 (21.10.98)
  2.  *
  3.  * This file is part of pasm, a portable PowerPC assembler.
  4.  * Copyright (c) 1997-98  Frank Wille
  5.  *
  6.  * pasm is freeware and part of the portable and retargetable ANSI C
  7.  * compiler vbcc, copyright (c) 1995-98 by Volker Barthelmann.
  8.  * pasm may be freely redistributed as long as no modifications are
  9.  * made and nothing is charged for it. Non-commercial usage is allowed
  10.  * without any restrictions.
  11.  * EVERY PRODUCT OR PROGRAM DERIVED DIRECTLY FROM MY SOURCE MAY NOT BE
  12.  * SOLD COMMERCIALLY WITHOUT PERMISSION FROM THE AUTHOR.
  13.  *
  14.  *
  15.  * v1.2   (21.10.98) phx
  16.  *        Predefining some more sections:
  17.  *        .sdata, .sdata2, .sbss, .init, .fini
  18.  *        Increased aligment constraints to 16-bytes (SVR4/EABI).
  19.  * v0.7   (21.11.97) phx
  20.  *        Missing extended mnemonics: mr. and not.
  21.  *        Fixed out of range warnings in extrwi, inslwi, rotwri and srwi.
  22.  * v0.6   (26.10.97) phx
  23.  *        @object and @function were removed from stdsets. They are
  24.  *        always defined during assembler initialization (pass.c).
  25.  * v0.4   (29.04.97) phx
  26.  *        Renamed .toc into .tocd.
  27.  *        Base relative addressing mode defaults to .baserel .tocd,2
  28.  * v0.2   (24.03.97) phx
  29.  *        Writes ELF object for 32-bit PowerPC big-endian. Either absolute
  30.  *        or ELF output format may be selected. ELF is default for all
  31.  *        currently supported platforms. PPCasm supports nine different
  32.  *        relocation types (there are much more...).
  33.  *        Compiles and works also under NetBSD/amiga (68k).
  34.  *        Changed function declaration to 'new style' in all sources
  35.  *        (to avoid problems with '...' for example).
  36.  *        Changed type of predefinition texts from character-constant
  37.  *        to character-array, to avoid bus errors on systems with
  38.  *        memory protection. 
  39.  *        .rwdata and .rdata section predefinitions deleted.
  40.  * v0.1   (11.03.97) phx
  41.  *        First test version with all PowerPC instructions and most
  42.  *        important directives. Only raw, absolute output.
  43.  *        I'm still uncertain about the sense of the sections .rodata,
  44.  *        .rdata and .rwdata (where .rodata and .rdata seem indentical
  45.  *        anyway). .toc isn't supported. .bss can't be activated by its
  46.  *        name, because there is a directive called .bss.
  47.  *        Some 64-bit extended macros are missing, e.g. for shifting.
  48.  * v0.0   (21.02.97) phx
  49.  *        File created.
  50.  */
  51.  
  52.  
  53. char stdsects[] =
  54.   ".section .text,\"crx4\"\n"
  55.   ".section .data,\"drw4\"\n"
  56.   ".section .rodata,\"dr4\"\n"
  57.   ".section .sdata,\"drw4\"\n"
  58.   ".section .sdata2,\"dr4\"\n"
  59.   ".section .bss,\"urw4\"\n"
  60.   ".section .sbss,\"urw4\"\n"
  61.   ".section .init,\"crx4\"\n"
  62.   ".section .fini,\"crx4\"\n"
  63.   ".section .tocd,\"drw4\"\n"
  64.   ".text\n"                     /* activate .text section */
  65.   ".baserel .tocd,2\n";         /* default base relative mode = TOC */
  66.  
  67.  
  68. char stdsets[] =
  69.   ".set r0,0\n.set r1,1\n.set r2,2\n.set r3,3\n"
  70.   ".set r4,4\n.set r5,5\n.set r6,6\n.set r7,7\n"
  71.   ".set r8,8\n.set r9,9\n.set r10,10\n.set r11,11\n"
  72.   ".set r12,12\n.set r13,13\n.set r14,14\n.set r15,15\n"
  73.   ".set r16,16\n.set r17,17\n.set r18,18\n.set r19,19\n"
  74.   ".set r20,20\n.set r21,21\n.set r22,22\n.set r23,23\n"
  75.   ".set r24,24\n.set r25,25\n.set r26,26\n.set r27,27\n"
  76.   ".set r28,28\n.set r29,29\n.set r30,30\n.set r31,31\n"
  77.   ".set f0,0\n.set f1,1\n.set f2,2\n.set f3,3\n"
  78.   ".set f4,4\n.set f5,5\n.set f6,6\n.set f7,7\n"
  79.   ".set f8,8\n.set f9,9\n.set f10,10\n.set f11,11\n"
  80.   ".set f12,12\n.set f13,13\n.set f14,14\n.set f15,15\n"
  81.   ".set f16,16\n.set f17,17\n.set f18,18\n.set f19,19\n"
  82.   ".set f20,20\n.set f21,21\n.set f22,22\n.set f23,23\n"
  83.   ".set f24,24\n.set f25,25\n.set f26,26\n.set f27,27\n"
  84.   ".set f28,28\n.set f29,29\n.set f30,30\n.set f31,31\n"
  85.   ".set cr0,0\n.set cr1,1\n.set cr2,2\n.set cr3,3\n"
  86.   ".set cr4,4\n.set cr5,5\n.set cr6,6\n.set cr7,7\n"
  87.   ".set lt,0\n.set gt,1\n.set eq,2\n.set so,3\n.set un,3\n"
  88.   ".set sp,1\n.set rtoc,2\n.set fp,31\n.set fpscr,0\n"
  89.   ".set xer,1\n.set lr,8\n.set ctr,9\n";
  90.  
  91.  
  92. char *xmnemos[] = {
  93.   ".macro subi\n addi \\1,\\2,-(\\3)\n.endm\n",
  94.   ".macro subis\n addis \\1,\\2,-(\\3)\n.endm\n",
  95.   ".macro subic\n addic \\1,\\2,-(\\3)\n.endm\n",
  96.   ".macro subic.\n addic. \\1,\\2,-(\\3)\n.endm\n",
  97.   ".macro sub\n subf \\1,\\3,\\2\n.endm\n",
  98.   ".macro sub.\n subf. \\1,\\3,\\2\n.endm\n",
  99.   ".macro subo\n subfo \\1,\\3,\\2\n.endm\n",
  100.   ".macro subo.\n subfo. \\1,\\3,\\2\n.endm\n",
  101.   ".macro subc\n subfc \\1,\\3,\\2\n.endm\n",
  102.   ".macro subc.\n subfc. \\1,\\3,\\2\n.endm\n",
  103.   ".macro subco\n subfco \\1,\\3,\\2\n.endm\n",
  104.   ".macro subco.\n subfco. \\1,\\3,\\2\n.endm\n",
  105.  
  106.   ".macro cmpwi\n.ifeq $NARG-2\n cmpi 0,0,\\1,\\2\n"
  107.           ".else\n cmpi \\1,0,\\2,\\3\n.endif\n.endm\n",
  108.   ".macro cmpw\n.ifeq $NARG-2\n cmp 0,0,\\1,\\2\n"
  109.           ".else\n cmp \\1,0,\\2,\\3\n.endif\n.endm\n",
  110.   ".macro cmplwi\n.ifeq $NARG-2\n cmpli 0,0,\\1,\\2\n"
  111.           ".else\n cmpli \\1,0,\\2,\\3\n.endif\n.endm\n",
  112.   ".macro cmplw\n.ifeq $NARG-2\n cmpl 0,0,\\1,\\2\n"
  113.           ".else\n cmpl \\1,0,\\2,\\3\n.endif\n.endm\n",
  114.   ".macro cmpdi\n.ifeq $NARG-2\n cmpi 0,1,\\1,\\2\n"
  115.           ".else\n cmpi \\1,1,\\2,\\3\n.endif\n.endm\n",
  116.   ".macro cmpd\n.ifeq $NARG-2\n cmp 0,1,\\1,\\2\n"
  117.           ".else\n cmp \\1,1,\\2,\\3\n.endif\n.endm\n",
  118.   ".macro cmpldi\n.ifeq $NARG-2\n cmpli 0,1,\\1,\\2\n"
  119.           ".else\n cmpli \\1,1,\\2,\\3\n.endif\n.endm\n",
  120.   ".macro cmpld\n.ifeq $NARG-2\n cmpl 0,1,\\1,\\2\n"
  121.           ".else\n cmpl \\1,1,\\2,\\3\n.endif\n.endm\n",
  122.  
  123.   ".macro extlwi\n rlwinm \\1,\\2,\\4,0,(\\3)-1\n.endm\n",
  124.   ".macro extlwi.\n rlwinm. \\1,\\2,\\4,0,(\\3)-1\n.endm\n",
  125.   ".macro extrwi\n rlwinm \\1,\\2,((\\4)+(\\3))&31,32-(\\3),31\n.endm\n",
  126.   ".macro extrwi.\n rlwinm. \\1,\\2,((\\4)+(\\3))&31,32-(\\3),31\n.endm\n",
  127.   ".macro inslwi\n rlwimi \\1,\\2,(32-(\\4))&31,\\4,((\\4)+(\\3))-1\n.endm\n",
  128.   ".macro inslwi.\n rlwimi. \\1,\\2,(32-(\\4))&31,\\4,((\\4)+(\\3))-1\n.endm\n",
  129.   ".macro insrwi\n rlwimi \\1,\\2,32-((\\4)+(\\3)),\\4,((\\4)+(\\3))-1\n.endm\n",
  130.   ".macro insrwi.\n rlwimi. \\1,\\2,32-((\\4)+(\\3)),\\4,((\\4)+(\\3))-1\n.endm\n",
  131.   ".macro rotlwi\n rlwinm \\1,\\2,\\3,0,31\n.endm\n",
  132.   ".macro rotlwi.\n rlwinm. \\1,\\2,\\3,0,31\n.endm\n",
  133.   ".macro rotrwi\n rlwinm \\1,\\2,(32-(\\3))&31,0,31\n.endm\n",
  134.   ".macro rotrwi.\n rlwinm. \\1,\\2,(32-(\\3))&31,0,31\n.endm\n",
  135.   ".macro rotlw\n rlwnm \\1,\\2,\\3,0,31\n.endm\n",
  136.   ".macro rotlw.\n rlwnm. \\1,\\2,\\3,0,31\n.endm\n",
  137.   ".macro slwi\n rlwinm \\1,\\2,\\3,0,31-(\\3)\n.endm\n",
  138.   ".macro slwi.\n rlwinm. \\1,\\2,\\3,0,31-(\\3)\n.endm\n",
  139.   ".macro srwi\n rlwinm \\1,\\2,(32-(\\3))&31,\\3,31\n.endm\n",
  140.   ".macro srwi.\n rlwinm. \\1,\\2,(32-(\\3))&31,\\3,31\n.endm\n",
  141.   ".macro clrlwi\n rlwinm \\1,\\2,0,\\3,31\n.endm\n",
  142.   ".macro clrlwi.\n rlwinm. \\1,\\2,0,\\3,31\n.endm\n",
  143.   ".macro clrrwi\n rlwinm \\1,\\2,0,0,31-(\\3)\n.endm\n",
  144.   ".macro clrrwi.\n rlwinm. \\1,\\2,0,0,31-(\\3)\n.endm\n",
  145.   ".macro clrlslwi\n rlwinm \\1,\\2,\\4,(\\3)-(\\4),31-(\\4)\n.endm\n",
  146.   ".macro clrlslwi.\n rlwinm. \\1,\\2,\\4,(\\3)-(\\4),31-(\\4)\n.endm\n",
  147.  
  148.   ".macro bt\n bc\\0 12,\\1,\\2\n.endm\n",
  149.   ".macro bf\n bc\\0 4,\\1,\\2\n.endm\n",
  150.   ".macro bdnz\n bc\\0 16,0,\\1\n.endm\n",
  151.   ".macro bdnzt\n bc\\0 8,\\1,\\2\n.endm\n",
  152.   ".macro bdnzf\n bc\\0 0,\\1,\\2\n.endm\n",
  153.   ".macro bdz\n bc\\0 18,0,\\1\n.endm\n",
  154.   ".macro bdzt\n bc\\0 10,\\1,\\2\n.endm\n",
  155.   ".macro bdzf\n bc\\0 2,\\1,\\2\n.endm\n",
  156.   ".macro bta\n bca\\0 12,\\1,\\2\n.endm\n",
  157.   ".macro bfa\n bca\\0 4,\\1,\\2\n.endm\n",
  158.   ".macro bdnza\n bca\\0 16,0,\\1\n.endm\n",
  159.   ".macro bdnzta\n bca\\0 8,\\1,\\2\n.endm\n",
  160.   ".macro bdnzfa\n bca\\0 0,\\1,\\2\n.endm\n",
  161.   ".macro bdza\n bca\\0 18,0,\\1\n.endm\n",
  162.   ".macro bdzta\n bca\\0 10,\\1,\\2\n.endm\n",
  163.   ".macro bdzfa\n bca\\0 2,\\1,\\2\n.endm\n",
  164.   ".macro blr\n bclr 20,0\n.endm\n",
  165.   ".macro btlr\n bclr\\0 12,\\1\n.endm\n",
  166.   ".macro bflr\n bclr\\0 4,\\1\n.endm\n",
  167.   ".macro bdnzlr\n bclr\\0 16,0\n.endm\n",
  168.   ".macro bdnztlr\n bclr\\0 8,\\1\n.endm\n",
  169.   ".macro bdnzflr\n bclr\\0 0,\\1\n.endm\n",
  170.   ".macro bdzlr\n bclr\\0 18,0\n.endm\n",
  171.   ".macro bdztlr\n bclr\\0 10,\\1\n.endm\n",
  172.   ".macro bdzflr\n bclr\\0 2,\\1\n